N개의 최소 공배수

Day 단계 2025-05-30

lcm(a,b)=a×bgcd(a,b)
class Solution {
    public int solution(int[] arr) {
        int lacm = 0;
        int lcd = 0;
        int m = 0;

		// 배열의 요소에 대해 반복
		// 최초 lcm 계산 때는 배열의 두 요소 사용
		// 이후엔 lcm과 다음 배열 요소의 최소 공배수 구하기
        for(int i = 0; i < arr.length-1; i++) {
            if(i == 0) {
                lcd = getLCD(arr[i], arr[i+1]);
                m = arr[i] * arr[i+1];
                lacm = m / lcd;
            }
            else {
                lcd = getLCD(lacm, arr[i+1]);
                m = lacm * arr[i+1];
                lacm = m / lcd;
            }
        }
        
        return lacm;
    }

	// 최대 공약수 계산
    public int getLCD(int a, int b) {
        if (b == 0) return a;
        return getLCD(b, a%b);
    }
}
// N개의 최소공배수
public class Main {
    public static void main(String[] args){
        int[] arr = {2, 6, 8, 14};
        int result = lcm(arr[0], arr[1]);
        for (int val: arr) {
            result = lcm(result, val);
        }
        System.out.println(result);
    }

	// 최대 공약수
    public static int gcd(int a, int b){
        if (b != 0){
            return gcd(b, a % b);
        }
        return a;
    }

	// 최소 공배수
    public static int lcm(int a , int b){
        return a * b / gcd(a, b);
    }
}